/**
 * 功能管理
 * @return {}
 */
var priFunctionTree = function() {
	var priFunctionTreePanel = new Ext.tree.TreePanel({
		id : 'priFunctionTreePanel',
		region : 'west',
		width : 350,
		autoScroll : true,
		enableDD : false,// 是否支持拖拽效果
		loader : new Ext.tree.TreeLoader({
					dataUrl : __ctxPath
							+ "/systemFunction/selectFunctionTreeMenu?isUnable=1"
				}),
		rootVisible : false,
		root : new Ext.tree.AsyncTreeNode({
					draggable : false,
					leaf : false,
					expand : true
				}),
		tbar : [{
					xtype : "button",
					text : "展开",
					iconCls : "btn-expand",
					scope : this,
					handler : function() {
						priFunctionTreePanel.expandAll();
					}
				}, {
					xtype : "tbseparator"
				}, {
					xtype : "button",
					text : "收起",
					iconCls : "btn-collapse",
					scope : this,
					handler : function() {
						priFunctionTreePanel.collapseAll();
					}
				}, {
					xtype : "tbseparator"
				}, "->", {
					id : "refresh",
					xtype : "button",
					text : "刷新",
					iconCls : "btn-refresh",
					handler : function() {
						priFunctionTreePanel.getRootNode().reload();
					}
				}]
	});
	// priFunctionTreePanel.expandAll();
	priFunctionTreePanel.on('rightClickCont', priFunctionTreePanel.rightClick,
			priFunctionTreePanel);

	var rightClick = new Ext.menu.Menu({
				items : [{
					text : '新增子节点',
					iconCls : "btn-add",
					handler : function() {
						var selectModel = priFunctionTreePanel
								.getSelectionModel();
						var node = selectModel.getSelectedNode();
						var rank = parseInt(node.attributes.url) + 1;
						Ext.getCmp('savePriFunction').enable();
						Ext.getCmp('priFunctionForm').getForm().reset();
						Ext.getCmp('priFunction_parentId').setValue(node.id);
						Ext.getCmp('priFunction_parentId_hidden')
								.setValue(node.id);
						Ext.getCmp("flag").setValue("insert");
					}
				}, {
					text : '查看权限人员',
					iconCls : "btn-preview",
					handler : function() {
						var selectModel = priFunctionTreePanel
								.getSelectionModel();
						var node = selectModel.getSelectedNode();
						queryFunctionRights(node.id, node.text)
					}
				}]
			});

	// 添加点击事件
	priFunctionTreePanel.on('click', function(node) {
				if (node.id != 0) {
					Ext.getCmp('savePriFunction').enable();
					formLoad(node.id);
				}
			});

	// 增加右键弹出事件
	priFunctionTreePanel.on('contextmenu', function(node, event) {// 声明菜单类型
				event.preventDefault();// 这行是必须的，使用preventDefault方法可防止浏览器的默认事件操作发生。
				node.select();
				rightClick.showAt(event.getXY());// 取得鼠标点击坐标，展示菜单
			});

	return priFunctionTreePanel;
}

var updatepriFunction = function() {

	var priFunctionBaseInfoField = new Ext.form.FieldSet({
				collapsible : false,
				border : false,
				buttonAlign : 'center',
				layout : 'form',
				items : [{
							xtype : 'textfield',
							name : 'name',
							anchor : '100%',
							allowBlank : false,
							blankText : '不能为空...',
							fieldLabel : '名称'
						}, {
							xtype : 'textfield',
							name : 'url',
							anchor : '100%',
							fieldLabel : 'URL'
						}, {
							xtype : 'numberfield',
							name : 'orderNum',
							anchor : '100%',
							allowBlank : false,
							blankText : '不能为空...',
							allowNegative : false,// 不允许输入负数
							allowDecimals : false,
							fieldLabel : '排序'
						}, {
							xtype : "combo",
							fieldLabel : "类型",
							hiddenName : "type",
							emptyText : "选择类型",
							store : new Ext.data.ArrayStore({
										fields : ["value", "text"],
										data : [['0', "系统"], ['1', "子系统"],
												['2', '模块'], ['3', '功能']]
									}),
							valueField : "value",
							displayField : "text",
							mode : "local",
							anchor : '100%',
							triggerAction : "all"
						}, {
							xtype : 'compositefield',
							fieldLabel : '是否可用',
							items : [{
										xtype : 'radio',
										boxLabel : '是',
										inputValue : "1",
										name : "isUseable",
										checked : true
									}, {
										xtype : 'radio',
										boxLabel : '否',
										name : "isUseable",
										inputValue : "0"
									}]
						}, {
							xtype : "combo",
							fieldLabel : "菜单加载方式",
							hiddenName : "loadType",
							emptyText : "选择类型",
							store : new Ext.data.ArrayStore({
										fields : ["value", "text"],
										data : [['js', "js"], ['jsp', "jsp"]]
									}),
							valueField : "value",
							displayField : "text",
							mode : "local",
							anchor : '100%',
							triggerAction : "all"
						}, {
							xtype : 'textfield',
							id : 'priFunction_parentId',
							fieldLabel : '父功能编号',
							anchor : '100%',
							disabled : true,
							name : 'parentId'
						}, {
							xtype : 'textfield',
							fieldLabel : '功能编号',
							anchor : '100%',
							disabled : true,
							name : 'id'
						}, {
							xtype : 'textfield',
							fieldLabel : '创建人',
							anchor : '100%',
							disabled : true,
							name : 'createdMan'
						}, {
							xtype : 'textfield',
							fieldLabel : '创建时间',
							anchor : '100%',
							disabled : true,
							name : 'createdAt'
						}, {
							xtype : 'textfield',
							fieldLabel : '修改人',
							anchor : '100%',
							disabled : true,
							name : 'updatedMan'
						}, {
							xtype : 'textfield',
							fieldLabel : '修改时间',
							anchor : '100%',
							disabled : true,
							name : 'updatedAt'
						}, {
							xtype : 'textfield',
							hidden : true,
							id : 'priFunction_id_hidden',
							name : 'id'
						}, {
							id : 'priFunction_parentId_hidden',
							xtype : 'textfield',
							name : 'parentId',
							hidden : true
						}, {
							xtype : 'textfield',
							hidden : true,
							value : '',
							id : 'flag'
						}]
			});

	var centerPanel = new Ext.form.FormPanel({
				title : '功能信息',
				id : 'priFunctionForm',
				region : 'center',
				frame : true,
				buttonAlign : 'center',
				labelAlign : 'right',
				border : false,
				reader : new Ext.data.JsonReader({
							success : 'success',
							root : 'data'
						}, [{
									name : 'id'
								}, {
									name : 'parentId'
								}, {
									name : 'name'
								}, {
									name : 'url'
								}, {
									name : 'type'
								}, {
									name : 'isUseable'
								}, {
									name : 'orderNum'
								}, {
									name : 'createdMan'
								}, {
									name : 'createdAt'
								}, {
									name : 'updatedMan'
								}, {
									name : 'updatedAt'
								}, {
									name : 'loadType'
								}]),
				items : [priFunctionBaseInfoField],
				buttons : [{
							text : '保存',
							id : 'savePriFunction',
							disabled : true,
							handler : function() {
								var flag = Ext.getCmp("flag").getValue();;
								savePriFunction(flag);
							}
						}]
			});
	return centerPanel;
}

var priFunctionPanel = function() {

	return new Ext.Panel({
				anchor : '100% 100%',
				border : false,
				layout : 'border',
				items : [priFunctionTree(), updatepriFunction()]
			});
}

var savePriFunction = function(flag) {
	var form = Ext.getCmp("priFunctionForm");
	if (form.getForm().isValid()) {
		var url = "";
		if (flag == 'insert') {
			url = __ctxPath + "/systemFunction/insetFunction";
		}
		if (flag == 'update') {
			url = __ctxPath + "/systemFunction/updateFunctionById";
		}
		Ext.Msg.confirm("信息确认", "您确认要保存吗？", function(c) {
					if (c == "yes") {
						form.getForm().submit({
							url : url,
							method : "POST",
							success : function(form, action) {
								Ext.MessageBox.show({
											title : "信息提示",
											msg : "保存成功!",
											buttons : Ext.MessageBox.OK,
											icon : Ext.MessageBox.INFO
										});
								Ext.getCmp('priFunctionTreePanel')
										.getRootNode().reload();
								Ext.getCmp("flag").setValue("update");
							},
							failure : function(c, d) {
								Ext.MessageBox.show({
											title : "操作信息",
											msg : "保存失败，请重新保存!",
											buttons : Ext.MessageBox.OK,
											icon : Ext.MessageBox.ERROR
										});
							}
						});
					}
				});
	}
}
/**
 * 加载功能信息
 * 
 * @param {}
 *            id
 */
function formLoad(id) {
	Ext.getCmp('priFunctionForm').load({
				url : __ctxPath + "/systemFunction/selectFunctionDOById",
				method : 'post',
				params : {
					id : id
				},
				root : 'data',
				success : function(form, action) {
					var jsonData = action.result.data;
					Ext.getCmp('priFunction_id_hidden').setValue(jsonData.id);
					Ext.getCmp('priFunction_parentId_hidden').setValue(jsonData.parentId);
					Ext.getCmp("flag").setValue("update");
				},
				failure : function(form, action) {
					Ext.Msg.alert("提示", "数据加载失败");
				}
			});
}
function queryFunctionRights(functionId, name) {
	var centerPanel = Ext.getCmp("centerTabPanel");
	var tab = centerPanel.getItem('_functionRights');
	if (tab == null) {
		var tab = centerPanel.add({
					id : '_functionRights',
					title : '查看【' + name + '】权限人员信息',
					layout : 'fit',
					closable : true,
					autoScroll : true
				});
	} else {
		tab.removeAll();
	}
	centerPanel.activate(tab);
	Ext.Loader.load([__ctxPath + '/js/system/queryFunctionRight.js'],
			function() {
				Ext.getCmp("centerTabPanel").getActiveTab()
						.add(functionRightsResult(functionId));
				Ext.getCmp("centerTabPanel").getActiveTab().doLayout();
				fieldSetListeners(['queryFunctionRightsGrid'], [0.85, 0.15]);
				// queryFunctionRights();
		});
}
Ext.getCmp("centerTabPanel").getActiveTab().add(priFunctionPanel());
Ext.getCmp("centerTabPanel").getActiveTab().doLayout();